iT邦幫忙

0

蝦皮串接實作筆記-串接 API 蝦皮物流標籤

  • 分享至 

  • xImage
  •  

前言

目標:串接蝦皮訂單、標籤資訊,目前串接蝦皮 OpenAPI 2.0 版本,串接手冊
串接步驟:

  1. Create App:建立串接的帳號
  2. Authorize Shop:商店授權
  3. Access Token:取得串接用需要的 access token
  4. 串接 API

前篇有取得訂單的資料了,這次要來嘗試串接物流單的 API
在取得物流單前,一樣可以先參考一下蝦皮的 API Call Flows 裡的 Arrange Shipment & Get TrackingNo & Print AirwayBill,有清出列出取得物流單的步驟


API Call Flows Arrange Shipment & Get TrackingNo & Print AirwayBill

這次的取得物流單的前提是,蝦皮已經幫我產生物流單號,所以這張圖我們只看下半部即可
https://ithelp.ithome.com.tw/upload/images/20220519/20136310MjeuoYceZ6.png

最上面的菱形區塊是在問是否要自己設計物流單,如果是的話就走左邊,打 get_shipping_document_info 那個 API,如果不是的話就走右邊然後按照順序執行那四個 API
說明一下,這兩者的差異:
方法 1(左邊):打一個 API,你會獲得物流單上的所有資訊。
方法 2(右邊):打完四個步驟的 API,你獲得可以直接拿來列印的物流單檔案。


方法1 - 取得物流單資訊 get_shipping_document_info

這個 API 可以讓你取得物流單的資訊

格式 HTTP/JSON
URL • 正式區:https://partner.shopeemobile.com/api/v2/logistics/get_shipping_document_info
• 測試區:https://partner.test-stable.shopeemobile.com/api/v2/logistics/get_shipping_document_info
請求方式 GET

公共參數:

參數 類型 說明
sign string access_token、partner_id、api path、shop_id、timestamp HMAC-SHA256 編碼,並用 partner key 當作加密 Key (可參授權商店那一篇)
partner_id int Create App 產生的 partner_id (可參Create App 那一篇)
timestamp int 時間戳,期限 5 min
access_token string 期限 4 小時(可參取得 access token 那一篇)
shop_id int 商店 ID(可參授權商店那一篇)

業務參數:(因為是 GET,所以要帶到 url 的 query)

參數 類型 說明
order_sn string 蝦皮的訂單單號,必填
package_number string 蝦皮的訂單包裹編號,非必填

以 PHP 為例

// 取得託運單資訊
function getShippingDocumentInfo(
	$host,
	$partnerId,
	$partnerKey,
	$timestamp,
	$access_token,
	$shop_id,
	$order_sn
){
	$path='/api/v2/logistics/get_shipping_document_info'; 
	$base_string=strval($partnerId.$path.$timestamp.$access_token.$shop_id);
	$sign=hash_hmac('sha256',$base_string,$partnerKey,false);
	
	$paremeter='&order_sn='.$order_sn;
	$url=$host.$path.'?partner_id='.$partnerId.'&timestamp='.$timestamp.'&sign='.$sign.'&access_token='.$access_token.'&shop_id='.$shop_id.$paremeter;

	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_HTTPHEADER, [
		'Content-Type: application/json'
	]);
	$res = curl_exec($ch);
	return $res;
}

串接成功後你就會收到物流單對應的資訊,超商物流單上的條碼是已經編譯好的,只要依照各個物流單的規範把資訊對應到相對的位置就可以自製物流單了!


方法2 - 取得物流單

方法 2 直接取得物流單會需要打四個 API:

URL 說明 請求方式
get_shipping_document_parameter 取得建議的物流單種類 台灣的話有兩種:- NORMAL_AIR_WAYBILL 普通列印(一頁可以多張標籤) -THERMAL_AIR_WAYBILL 熱感列印(一頁只有一張標籤) POST
create_shipping_document 建立物流單 注意:要在 TrackingNo 產生後才能建立,如果狀態已經變成 SHIPPED 就不能再建立 POST
get_shipping_document_result 取得建立物流單的結果 結果有 READY, FAILED, PROCESSING POST
download_shipping_document 下載物流單 get_shipping_document_result 結果是 READY 才可以下載 POST

(其他詳細內容也可以參考蝦皮的【FAQ】)

如果沒有 create_shipping_document 直接去打 download_shipping_document 是不會有檔案的
所以要乖乖照 API Call Flows 的流程走才會順利取得物流單
以 7-11 店到店為例,download_shipping_document 最後會跳到平常用店到店要列印物流單的畫面,這樣你就可以直接列印物流單了


小小心得:

方法 1 相對來說自由度高一些,因為只會有資訊,你可以用那些資訊排版,然後再自由加上一些你想加的資訊,方法 2 的話,可以直接列印物流單,不用自己排版,相對來說方便一點。
總之兩種方法都各有好處,就看自己要怎麼利用了。

個人覺得蝦皮的 API 除了前面授權取 access token 時需要花一點時間研究,後面串接資料的時有感受到開發者的貼心,請求的參數很彈性,取得資料的欄位也可以自行決定,另外手冊的範例、說明也都蠻清楚,就連印個標籤也有兩種方式讓你選呢!


參考資料:

API Call Flows
【FAQ】Open API_物流相關問題


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
arguskao
iT邦新手 3 級 ‧ 2023-09-03 20:13:19

請問這個是不是要跟蝦皮申請,審核通過才能用呢?
謝謝!

blueqoo iT邦新手 5 級 ‧ 2024-04-30 11:47:27 檢舉

是的!!

我要留言

立即登入留言